/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.util.ArrayList;
import java.util.List;
import model.Usuario;
import org.hibernate.Session;
//import static org.hibernate.criterion.Expression.sql;
import util.HibernateUtil;

/**
 *
 * @author Alfredo
 */
public class UsuarioDaoImpl implements UsuarioDao{

    @Override
    public Usuario findByUsuario(Usuario usuario) {
        Usuario model = null;
        Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
        System.out.println("-----findByUsuario------"+usuario.getUsuario());
        String sql = "FROM Usuario WHERE usuario = '"+usuario.getUsuario()+"'";
        System.out.println("-----findByUsuario------"+usuario.getUsuario());
        System.out.println("sql: "+sql);
        try{
            sesion.beginTransaction();
            model = (Usuario) sesion.createQuery(sql).uniqueResult();
//            sesion.beginTransaction().commit();
        }catch(Exception e){
            sesion.beginTransaction().rollback();
        }
        return model;
    }

    @Override
    public Usuario login(Usuario usuario) {
        Usuario model = this.findByUsuario(usuario);
        if(model != null){
            if(!usuario.getClave().equals(model.getClave())){
                model = null;
            }
        }
        return model;
    }

    @Override
    public List<Usuario> findAll() {
        List<Usuario> listado = null;
        Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
        String sql = "FROM Usuario";
        System.out.println("----sql findAll----: "+sql);
        try{
            sesion.beginTransaction();
            listado = sesion.createQuery(sql).list();
//            sesion.beginTransaction().commit();
            System.out.println("----sql findAll----: 1");
        }catch(Exception e){
            sesion.beginTransaction().rollback();
        }
        return listado;
    }

    @Override
    public boolean create(Usuario usuario) {
        Boolean flag;
        Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
        System.out.println("----sql create----: 1");

        try{
            sesion.beginTransaction();
            System.out.println("----sql create----: 2");
            sesion.save(usuario);
            System.out.println("----sql create----: 3 "+ usuario.getUsuario());
            sesion.beginTransaction().commit();
            System.out.println("----sql create----: 4 ");
            flag = true;
        }catch(Exception e){
            flag = false;
            System.out.println("----sql create----: 5 ");
            sesion.beginTransaction().rollback();
            System.out.println("----sql create----: 6 ");
        }
        System.out.println("flag----sql create----: 7 "+ flag);
        return flag;
    }

    @Override
    public boolean update(Usuario usuario) {
        Boolean flag;
        Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
        try{
            sesion.beginTransaction();
            sesion.update(usuario);
            sesion.beginTransaction().commit();
            flag = true;
        }catch(Exception e){
            flag = false;
            sesion.beginTransaction().rollback();
        }
        return flag;
    }

    @Override
    public boolean delete(Integer id) {
        Boolean flag;
        Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
        try{
            sesion.beginTransaction();
            Usuario usuario = (Usuario) sesion.load(Usuario.class, id);
            sesion.delete(usuario);
            sesion.beginTransaction().commit();
            flag = true;
        }catch(Exception e){
            flag = false;
            sesion.beginTransaction().rollback();
        }
        return flag;
    }
}
